0

私は Java と Swing GUI で最初の一歩を踏み出しました。私の計画は、いくつかのテキストと 2 つのタブ付き JPanel を埋めるための JTextArea を備えた小さな GUI を作成することです。しかし、問題は、JTextArea にテキストを入力して [Includes] タブ (または別の [Functions] タブ) をクリックすると、タブメニューのサイズが変更されることです (固定の 50:50 ビューが必要です)。

理解を深めるために、いくつかの写真を次に示します。

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

Javaコードは次のとおりです。

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;

public class Editor extends JFrame {
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        Editor editor = new Editor();
    }

    private JTextArea guiEdit = new JTextArea();
    private JScrollPane utilScrollbar = new JScrollPane(guiEdit);
    private JTabbedPane guiOverviewTabPanel = new JTabbedPane();
    private JPanel guiOverviewTabIncludes = new JPanel();
    private JPanel guiOverviewTabFunctions = new JPanel();

    public Editor() {
        // Set layout
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(gridbag);

        // Add the textfield
        c.fill = GridBagConstraints.BOTH;
        c.gridx = 0;
        c.gridy = 0;
        c.gridheight = 1;
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.anchor = GridBagConstraints.WEST;
        add(utilScrollbar, c);

        // Add tabs to the JTabbedPane
        guiOverviewTabPanel.add("Includes", guiOverviewTabIncludes);
        guiOverviewTabPanel.add("Functions", guiOverviewTabFunctions);

        // Add the JTabbedPane
        c.fill = GridBagConstraints.BOTH;
        c.gridx = 1;
        c.gridy = 0;
        c.gridheight = 1;
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.anchor = GridBagConstraints.EAST;
        add(guiOverviewTabPanel, c);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
        this.setMinimumSize(new Dimension(800, 400));

        setVisible(true);
    }
}

この視点を修正する方法/解決策を知っている人はいますか? 実際の比率は 5:2 です (JTextArea の 5 部分と JTabbedPane の 2 部分 - これは理解を深めるためのものなので、GridLayout は使用できません)

4

1 に答える 1

1

JSplitPaneは、この種のGUIディスプレイを対象としています。

JSplitPaneを使用するようにコードを変更しました。

import java.awt.Dimension;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;

public class Editor extends JFrame {
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        new Editor();
    }

    private JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    private JTextArea guiEdit = new JTextArea();
    private JScrollPane utilScrollbar = new JScrollPane(guiEdit);
    private JTabbedPane guiOverviewTabPanel = new JTabbedPane();
    private JPanel guiOverviewTabIncludes = new JPanel();
    private JPanel guiOverviewTabFunctions = new JPanel();

    public Editor() {
        HierarchyListener hierarchyListener = new HierarchyListener() {
            @Override
            public void hierarchyChanged(HierarchyEvent event) {
                long flags = event.getChangeFlags();
                if ((flags & HierarchyEvent.SHOWING_CHANGED) == 
                        HierarchyEvent.SHOWING_CHANGED) {
                    splitPane.setDividerLocation(0.50D);
                }
            }

        };

//      guiEdit.setLineWrap(true);
//      guiEdit.setWrapStyleWord(true);

        splitPane.setLeftComponent(utilScrollbar);

        // Add tabs to the JTabbedPane
        guiOverviewTabPanel.add("Includes", guiOverviewTabIncludes);
        guiOverviewTabPanel.add("Functions", guiOverviewTabFunctions);

        splitPane.setRightComponent(guiOverviewTabPanel);

        splitPane.addHierarchyListener(hierarchyListener);
        add(splitPane);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
        this.setMinimumSize(new Dimension(800, 400));

        setVisible(true);
    }
}
于 2012-11-08T17:52:57.767 に答える