meine Border überlappt sich mit meiner JTable

nixkönner

Grünschnabel
Hallo zusammen!
Ich sitze gerade an meiner allerersten Gui...und ich verzweifle..

zB: folgendes Problem:
JTable Punnetschema = new JTable(....));
Border inbord = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
Border outbord = BorderFactory.createLineBorder(Color.GREEN, 5);
Punnetschema.setBorder(BorderFactory.createCompoundBorder(outbord, inbord));

JPanel mitte = new JPanel();
mitte.setLayout(new GridLayout(1,2));
mitte.add(Punnetschema);

-->Optik: siehe Anhang

Warum überschreibt die border meine wunderschöne ;) Tabelle?
Und, wo wir schon mal dabei sind: Warum nimmt die Tabelle nach unten hin so viel Platz ein? Liegts am LayoutManager?

Beste Grüße,
Nina
 

Anhänge

  • fürsnetz.jpg
    fürsnetz.jpg
    26,5 KB · Aufrufe: 76
Hallo Nina,

ich würde Dir empfehlen, eine JTable nie direkt in einen Kontainer (wie JPanel) zu setzen, sondern erst in eine JScrollPane zu packen. Damit stellst Du sicher, dass die Scroll-Balken erscheinen, sobald der Inhalt Deiner Tabelle nicht mehr komplett angezeigt werden kann (z.B. beim Verkleinern des Fensters). Und wenn Du schon eine ScrollPane hast, dann kannst Du den Border dort setzten, anstatt in der Tabelle:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;

/**
 * The Class TableBorderTest.
 */
public class TableBorderTest extends JFrame {

    /**
     * Create a new instance of <code>TableBorderTest</code>.
     */
    public TableBorderTest() {
        super("TableBorderTest");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        final String[] cols = new String[] {"A", "B", "C", "D", "E"};
        final Object[][] data = new Object[10][cols.length];
        for (int i = 0; i < data.length; i++) {
            final Object[] row = data[i];
            for (int j = 0; j < row.length; j++) {
                row[j] = cols[j] + (i + 1);
            }
        }
        final JTable table = new JTable(data, cols);
        final JScrollPane scrollPane = new JScrollPane(table);

        Border inbord = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
        Border outbord = BorderFactory.createLineBorder(Color.GREEN, 5);
        //table.setBorder(BorderFactory.createCompoundBorder(outbord, inbord));
        scrollPane.setBorder(BorderFactory.createCompoundBorder(outbord, inbord));

        final JPanel panelMiddle = new JPanel(new BorderLayout());
        panelMiddle.add(scrollPane);

        final Container container = getContentPane();
        container.setLayout(new BorderLayout());
        container.add(panelMiddle, BorderLayout.CENTER);
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        final JFrame frame = new TableBorderTest();
        final Dimension frameSize = new Dimension(600, 400);
        frame.setSize(frameSize);
        final Dimension screenSize =
            Toolkit.getDefaultToolkit().getScreenSize();
        final int frameX = (screenSize.width - frameSize.width) / 2;
        final int frameY = (screenSize.height - frameSize.height) / 2;
        frame.setLocation(frameX, frameY);
        frame.setVisible(true);
    }
}

Grüße
Vincent
 
Zurück