始终将专注的 JPanel 居中



我有一个项目,我总是想把专注的JPanel居中。所以我想我可以改变视口位置。但我不能使用视口。我创建了一个示例项目来展示如何使用视口。我只希望用户只看到其中一个橙色框。但也应该可以一次查看所有框。所以视图必须放大或类似的东西。如何解决此问题?我的例子:

import javax.swing.*;
import java.awt.*;

public class main {
    public static void main(String [] args){
        //create JFrame
        JFrame _frame = new JFrame();
        //create Viewport
        JViewport _view = new JViewport();
        //create Mainpanel
        JPanel _mainPanel = new JPanel();
        //tell the view to handle mainpanel
        _view.setView(_mainPanel);
        //create Layout
        GridLayout _layout = new GridLayout(3,3,3,3);
        //set gridlayout to mainpanel
        _mainPanel.setLayout(_layout);


        for(int i = 0;i<12;i++){
            JPanel _tempPanel = new JPanel();
            _tempPanel.setBackground(Color.ORANGE);
            _tempPanel.setBorder(BorderFactory.createLineBorder(Color.black));
            _mainPanel.add(_tempPanel);
        }

        _view.setExtentSize(new Dimension(300,300));
        //add mainpanel to frame
        _frame.add(_mainPanel);

        _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        _frame.pack();
        //set size of Jframe
        _frame.setSize(1000,1000);
        _frame.setVisible(true);
    }
}

>JViewPort无法帮助您满足您的要求。这是一个丑陋但正在运行的代码。您可以自己改进它。

public static void main(String[] args) {
    // create JFrame
    JFrame _frame = new JFrame();
    JPanel conPanel = new JPanel(new BorderLayout());
    // create Mainpanel
    JPanel _mainPanel = new JPanel() {
        @Override
        public String toString() {
            return "All";
        }
    };
    // create Layout
    GridLayout _layout = new GridLayout(3, 3, 3, 3);
    // set gridlayout to mainpanel
    _mainPanel.setLayout(_layout);
    JComboBox<JPanel> combo = new JComboBox<>();
    combo.addItem(_mainPanel);
    for (int i = 0; i < 12; i++) {
        final int fi = i;
        JPanel _tempPanel = new JPanel() {
            @Override
            public String toString() {
                return "Panel" + fi;
            }
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawString(toString(), 5, 15);
            }
        };
        _tempPanel.setBackground(Color.ORANGE);
        _tempPanel.setBorder(BorderFactory.createLineBorder(Color.black));
        _mainPanel.add(_tempPanel);
        combo.addItem(_tempPanel);
    }
    combo.addActionListener( e -> {
        JPanel panel = (JPanel)combo.getSelectedItem();
        conPanel.remove(_mainPanel);
        _mainPanel.removeAll();
        for(int i = 1; i < combo.getItemCount(); i++)
            _mainPanel.add(combo.getItemAt(i));
        conPanel.add(panel, BorderLayout.CENTER);
        conPanel.revalidate();
        conPanel.repaint();
    } );
    conPanel.add(_mainPanel, BorderLayout.CENTER);
    JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    buttonsPanel.add(combo);
    conPanel.add(buttonsPanel, BorderLayout.SOUTH);
    // add mainpanel to frame
    _frame.setContentPane(conPanel);
    _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // set size of Jframe
    _frame.setSize(1000, 1000);
    _frame.setVisible(true);
}

相关内容

  • 没有找到相关文章

最新更新