3 Stimmen

Wie verhindere ich, dass mein JScrollPane/JTextArea über das enthaltende JTabbedPane hinauswächst?

Ich kann nicht herausfinden, warum mein Code dazu führt, dass der untere JTextArea über die Grenzen des Fensters hinauswächst, in dem er sich befindet.

Ich habe die grafische Benutzeroberfläche mit WindowBuilder erstellt und viele verschiedene Möglichkeiten zur Begrenzung der Größe ausprobiert, aber ich kann einfach nicht herausfinden, warum sie über die Größe hinauswächst, die ich in der Entwurfsansicht von WindowBuilder festgelegt habe.

Dies ist mein Code:(Dies ist mein erstes Mal mit diesem Forum, bitte entschuldigen Sie Posting Fehler)

public class Reporter extends JFrame {
    private static final long serialVersionUID = 1L;
    class MyTableModel extends AbstractTableModel {
        private static final long serialVersionUID = 1L;
        private String[] columnNames;
        private Object[][] data;

        public MyTableModel(String[] columnNames) {
            this.columnNames=columnNames;
            this.data=new Object[0][columnNames.length];
        }
        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        public Class<? extends Object> getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }
        public void addRow(Object[] objs) {
            Object[][] newData = new Object[this.getRowCount()+1][this.getColumnCount()];
            for (int row=0; row<this.getRowCount(); row++) {
                for (int col=0; col<this.getColumnCount(); col++) {
                    newData[row][col]=this.data[row][col];
                }
            }
            for (int col=0; col<this.getColumnCount(); col++) {
                newData[newData.length-1][col]=objs[col];
            }
            this.data=newData;
            fireTableDataChanged();
        }
        public void setRow(int rowIndex, Object[] objs) {
            for (int col=0; col<this.getColumnCount(); col++) {
                this.data[rowIndex][col]=objs[col];
            }
            fireTableRowsUpdated(rowIndex, rowIndex);
        }
    }
    private JTabbedPane bugTabPane;
    private JScrollPane tableScrollPane;
    private ArrayList<JTextArea> bugOuts;
    private JScrollPane graphScrollPane;
    private JTable table;
    private JScrollPane announcerScrollPane;
    private JTextArea announcerTextArea;
    private GraphBox graphPane;

    public Reporter() {
        setBounds(100, 100, 903, 751);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        getContentPane().setLayout(new MigLayout("", "[grow]", "[200px:200px][200px:200px:200px][200px:200px:200px]"));

        this.graphScrollPane = new JScrollPane();
        this.graphScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.graphScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        getContentPane().add(this.graphScrollPane, "cell 0 0,grow");
        this.graphPane = new GraphBox();
        this.graphScrollPane.add(graphPane);

        Attribute[] attributeNames=Attribute.values();
        String[] otherColumnNames={"Name","Creator","Last Act"};
        String[] columnNames = new String[attributeNames.length+otherColumnNames.length];
        for (int i=0; i<otherColumnNames.length; i++) {
            columnNames[i]=otherColumnNames[i];
        }
        for (int i=0; i<attributeNames.length; i++) {
            columnNames[otherColumnNames.length+i]=attributeNames[i].toString();
        }

        this.tableScrollPane = new JScrollPane();
        getContentPane().add(this.tableScrollPane, "cell 0 1,grow");
        this.table = new JTable(new MyTableModel(columnNames));
        this.tableScrollPane.setViewportView(this.table);

        this.bugTabPane = new JTabbedPane(JTabbedPane.TOP);
        getContentPane().add(this.bugTabPane, "cell 0 2,grow");
        this.bugTabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

        this.announcerScrollPane = new JScrollPane();
        this.announcerScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        this.announcerScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        this.bugTabPane.addTab("Announcer", null, this.announcerScrollPane, null);

        this.announcerTextArea = new JTextArea(1, 40);
        this.announcerTextArea.setMaximumSize(new Dimension(2147483647, 200));
        this.announcerTextArea.setEnabled(false);
        this.announcerScrollPane.setViewportView(this.announcerTextArea);
        this.bugOuts = new ArrayList<JTextArea>();
        pack();

    }
    public TableModel getTableModel() {
        return this.table.getModel();
    }
    public void addTableRow(BugStepRecord bugStepRecord) {
        Object[] rowObjs = new Object[this.table.getColumnCount()];
        rowObjs[0] = bugStepRecord.getName();
        rowObjs[1] = bugStepRecord.getCreator();
        rowObjs[2] = bugStepRecord.getAct();
        for (int i=0; i<bugStepRecord.getAttributeVals().length; i++) {
            rowObjs[3+i] = bugStepRecord.getAttributeVals()[i];
        }
        MyTableModel myTableModel = (MyTableModel)this.table.getModel();
        myTableModel.addRow(rowObjs);
    }
    public void updateTableRow(int rowIndex, BugStepRecord bugStepRecord) {
        Object[] rowObjs = new Object[this.table.getColumnCount()];
        rowObjs[0] = bugStepRecord.getName();
        rowObjs[1] = bugStepRecord.getCreator();
        rowObjs[2] = bugStepRecord.getAct();
        for (int i=0; i<bugStepRecord.getAttributeVals().length; i++) {
            rowObjs[3+i] = bugStepRecord.getAttributeVals()[i];
        }
        MyTableModel myTableModel = (MyTableModel)this.table.getModel();
        myTableModel.setRow(rowIndex, rowObjs);
    }
    public JTextArea addBugTab(String name, Icon icon) {
        final JTextArea textArea = new JTextArea(1, 40);
        textArea.setEditable(false);
        JScrollPane bugScrollPane = new JScrollPane();
        bugScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        bugScrollPane.setViewportView(textArea);
        this.bugOuts.add(textArea);
        this.bugTabPane.addTab(name, icon, bugScrollPane, null);
        return textArea;
    }
}

0voto

Xeon Punkte 5899

Ich glaube, dass Sie den Boden wollen JTabbedPane zur Anpassung an die Höhe Ihres Anwendungsfensters. In diesem Fall - Zeile:

new MigLayout("", "[grow]", "[200px:200px][200px:200px:200px][200px:200px:200px]"));

ist Ihr Problem. Sie setzen die minimale Höhe der 3. Zeile auf 200px (und wenn Sie wollen, dass diese Zeile zu wachsen - das ist auch nicht geschehen - 200px maximale Höhe)

En MigLayout Spickzettel :

The format is "min:preferred:max", however there are shorter versions since for instance it is seldom needed to specify the maximum size.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X