S
SenioreFamicom
Gast
Hallo Leute,
erstmal mein Quellcode voran:
Die erste Klasse:
Die zweite Klasse:
Das geladene Bild hat die Maße 480x256 Pixel.
Jetzt meine Frage: Wieso zeigt mein Programm beim Ausführen von der zweiten Klasse die Bitmap nur teilweise (genauer nur die oberen 128 Pixel) an? Erst beim Scrollen mit JScrollPane wird der Rest übermalt.
erstmal mein Quellcode voran:
Die erste Klasse:
Code:
package SN32.Editor.LowClass;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JComponent;
import javax.swing.JPanel;
public class KBitmap extends JPanel {
private int scaleXY = 2;
private int width = 480;
private int height = 256;
public KBitmap() {
this.setLayout(null);
this.setSize(this.width * this.scaleXY, this.height * this.scaleXY);
this.setLocation(0, 0);
this.setVisible(true);
this.repaint();
}
public void paintComponent(Graphics g) {
Image img;
img = getToolkit().getImage("C:/Games/Sprites/Harvest Moon/hmkuhstall.png");
this.setPreferredSize(new Dimension(this.width * scaleXY, this.height * scaleXY));
this.setMinimumSize (new Dimension(this.width * scaleXY, this.height * scaleXY));
this.setMaximumSize (new Dimension(this.width * scaleXY, this.height * scaleXY));
Graphics2D g2D = (Graphics2D) g;
g2D.scale(scaleXY, scaleXY);
g2D.drawImage(img, 0, 0, this);
}
public int getScaleXY() {
return this.scaleXY;
}
public int getWidth() {
return this.width;
}
public int getHeight() {
return this.height;
}
}
Die zweite Klasse:
Code:
package SN32.Editor.TabTile;
import SN32.Editor.Constants;
import SN32.Editor.LowClass.KBitmap;
import SN32.Editor.ReferenceBook.ReferenceBook;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
public class TilePropReader extends JDialog implements ActionListener {
private static final int HINZUF = 0; // Button
private static final int SEQDEL = 1; // Button
private static final int ALLDEL = 2; // Button
private static final int ANWEND = 3; // Button
private static final int NEWSET = 4; // Button
private static final int HILFE = 5; // Button
private static final int ABBRCH = 6; // Button
private static final int RIGHT_O = 1; // Panel
private static final int RIGHT_I = 2; // Panel
private static final int LEFT_0L = 0; // Panel
private static final int JLIST = 0; // ScrollPane
private static final int JVIEW = 1; // ScrollPane
private File file = null;
private KBitmap bitmap = null;
public Vector animation = null;
public JButton [] button = new JButton[7];
public JLabel [] label = new JLabel[2];
public DefaultListModel model = new DefaultListModel();
public JList list = new JList(model);
public JPanel [] panel = new JPanel[3];
public JScrollPane [] scrollPane = new JScrollPane[2];
public JSpinner [] spinner = new JSpinner[4];
public JTextField textField = new JTextField("()");
public TilePropReader(final javax.swing.JFrame parent, final File file) {
super(parent, true);
this.file = file;
bitmap = new KBitmap();
// .....................................................................
panel[LEFT_0L] = new JPanel();
panel[RIGHT_O] = new JPanel();
panel[RIGHT_I] = new JPanel();
// links, inneres
panel[LEFT_0L].setLayout(null);
panel[LEFT_0L].setSize(480*2, 256*2);
panel[LEFT_0L].setLocation(0, 0);
panel[LEFT_0L].add(bitmap);
panel[LEFT_0L].setVisible(true);
//rechts, äußeres
panel[RIGHT_O].setLayout(null);
panel[RIGHT_O].setSize(456 + 16, 480 + 24);
panel[RIGHT_O].setLocation(328, 16);
panel[RIGHT_O].setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Tileset-Konfigurationen"));
panel[RIGHT_O].setVisible(true);
// rechts, inneres (Ani.seq.)
panel[RIGHT_I].setLayout(null);
panel[RIGHT_I].setSize(440, 404);
panel[RIGHT_I].setLocation(16, 84);
panel[RIGHT_I].setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Animationssequenzen"));
panel[RIGHT_I].setVisible(true);
// .....................................................................
scrollPane[JLIST] = new JScrollPane(list);
scrollPane[JLIST].setSize(256 + 24 - 16, 256);
scrollPane[JLIST].setLocation(16, 56);
scrollPane[JLIST].setBorder(BorderFactory.createEtchedBorder());
scrollPane[JLIST].setAutoscrolls(true);
scrollPane[JLIST].setWheelScrollingEnabled(true);
scrollPane[JLIST].setVisible(true);
scrollPane[JVIEW] = new JScrollPane(bitmap, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane[JVIEW].setSize(256 + 20, 480);
scrollPane[JVIEW].setLocation(16, 16);
scrollPane[JVIEW].getViewport().setView(bitmap);
scrollPane[JVIEW].setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Vorschau"));
scrollPane[JVIEW].setAutoscrolls(true);
scrollPane[JVIEW].setWheelScrollingEnabled(true);
scrollPane[JVIEW].setVisible(true);
// .................................................................
label[0] = new JLabel("Tile-Größe: ");
label[1] = new JLabel("Transparenz-RGB: ");
// Tile-Größe
label[0].setSize(128, 24);
label[0].setLocation(16, 32);
label[0].setVisible(true);
// Transparenz-RGB
label[1].setSize(128, 24);
label[1].setLocation(16, 60);
label[1].setVisible(true);
// .....................................................................
spinner[0] = new JSpinner(new SpinnerNumberModel(16, 4, 64, 2));
spinner[1] = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
spinner[2] = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
spinner[3] = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
// Tile-Größe
spinner[0].setSize(40, 24);
spinner[0].setLocation(160, 32);
spinner[0].setBorder(BorderFactory.createEtchedBorder());
spinner[0].setVisible(true);
// R
spinner[1].setSize(40, 24);
spinner[1].setLocation(160, 58);
spinner[1].setBorder(BorderFactory.createEtchedBorder());
spinner[1].setVisible(true);
// G
spinner[2].setSize(40, 24);
spinner[2].setLocation(208, 58);
spinner[2].setBorder(BorderFactory.createEtchedBorder());
spinner[2].setVisible(true);
// B
spinner[3].setSize(40, 24);
spinner[3].setLocation(256, 58);
spinner[3].setBorder(BorderFactory.createEtchedBorder());
spinner[3].setVisible(true);
// .....................................................................
button[HINZUF] = new JButton("Hinzufügen");
button[SEQDEL] = new JButton("Seq. löschen");
button[ALLDEL] = new JButton("Alle löschen");
button[ANWEND] = new JButton("Anwenden");
button[NEWSET] = new JButton("Neues Set laden");
button[HILFE] = new JButton("Hilfe");
button[ABBRCH] = new JButton("Abbrechen");
button[HINZUF].setSize(128, 32);
button[SEQDEL].setSize(128, 32);
button[ALLDEL].setSize(128, 32);
button[ANWEND].setSize(128, 32);
button[NEWSET].setSize(128, 32);
button[HILFE].setSize(128, 32);
button[ABBRCH].setSize(128, 32);
button[HINZUF].setLocation(296, 20);
button[SEQDEL].setLocation(296, 68);
button[ALLDEL].setLocation(296, 116);
button[ANWEND].setLocation(112, 552);
button[NEWSET].setLocation(256, 552);
button[HILFE].setLocation(400, 552);
button[ABBRCH].setLocation(544, 552);
button[0].addActionListener(this);
button[1].addActionListener(this);
button[2].addActionListener(this);
button[3].addActionListener(this);
button[4].addActionListener(this);
button[5].addActionListener(this);
button[6].addActionListener(this);
button[0].setVisible(true);
button[1].setVisible(true);
button[2].setVisible(true);
button[3].setVisible(true);
button[4].setVisible(true);
button[5].setVisible(true);
button[6].setVisible(true);
// .....................................................................
textField.setSize(256 + 8, 24);
textField.setLocation(16, 24);
textField.setVisible(true);
// .....................................................................
list.setSize(256 + 24 - 16, 256);
list.setLocation(16, 56);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisible(true);
// .....................................................................
// ===============================
this.add(scrollPane[JVIEW]);
panel[RIGHT_I].add(textField);
panel[RIGHT_I].add(scrollPane[JLIST]);
panel[RIGHT_I].add(button[0]);
panel[RIGHT_I].add(button[1]);
panel[RIGHT_I].add(button[2]);
panel[RIGHT_O].add(label[0]);
panel[RIGHT_O].add(label[1]);
panel[RIGHT_O].add(spinner[0]);
panel[RIGHT_O].add(spinner[1]);
panel[RIGHT_O].add(spinner[2]);
panel[RIGHT_O].add(spinner[3]);
panel[RIGHT_O].add(panel[2]);
// ===============================
this.setLayout(null);
this.setSize(816, 640);
this.setLocation(256, 192);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//this.add(panel[LEFT]);
this.add(panel[RIGHT_O]);
this.add(button[3]);
this.add(button[4]);
this.add(button[5]);
this.add(button[6]);
this.setVisible(true);
}
}
Jetzt meine Frage: Wieso zeigt mein Programm beim Ausführen von der zweiten Klasse die Bitmap nur teilweise (genauer nur die oberen 128 Pixel) an? Erst beim Scrollen mit JScrollPane wird der Rest übermalt.