gpt4 book ai didi

java - 在 JPanel 中左右移动

转载 作者:行者123 更新时间:2023-11-30 08:03:27 25 4
gpt4 key购买 nike

我想动态添加多个按钮到 JPanel,当我添加时它只显示固定数量的按钮,

enter image description here

所以我想添加一个左右移动来查看所有按钮

enter image description here

我们如何才能做到这一点,有没有任何java组件可以做到这一点?

public class TestJPanel extends JFrame {
JPanel statusBar;
public TestJPanel() {
setLayout(new BorderLayout());
statusBar = new JPanel();
statusBar.setLayout(new BoxLayout(statusBar, BoxLayout.LINE_AXIS));
add("South", statusBar);
for (int i = 1; i < 20; i++) {
statusBar.add(new Button("Button" + i));
}
} }

最佳答案

这是我周围的一些旧代码,它们会根据需要自动添加/删除左/右按钮:

import java.awt.*;
import java.util.List;
import java.util.ArrayList;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;


public class ScrollContainer extends JPanel
implements ActionListener, ComponentListener
{
private Container container;
private List<Component> removedComponents = new ArrayList<Component>();
private JButton forwardButton;
private JButton backwardButton;

public ScrollContainer(Container container)
{
this.container = container;
setLayout( new BorderLayout(5, 0) );
addComponentListener( this );

// Create buttons to control scrolling

backwardButton = new BasicArrowButton( BasicArrowButton.WEST );
configureButton( backwardButton );
forwardButton = new BasicArrowButton( BasicArrowButton.EAST);
configureButton( forwardButton );

// Layout the panel

add( backwardButton, BorderLayout.WEST );
add( container );
add( forwardButton, BorderLayout.EAST );
}

// Implement the ComponentListener

public void componentResized(ComponentEvent e)
{
// When all components cannot be shown, add the forward button

int freeSpace = getSize().width - container.getPreferredSize().width;

if (backwardButton.isVisible())
freeSpace -= backwardButton.getPreferredSize().width;

forwardButton.setVisible( freeSpace < 0 );

// We have free space, redisplay removed components

while (freeSpace > 0 && ! removedComponents.isEmpty())
{
if (removedComponents.size() == 1)
freeSpace += backwardButton.getPreferredSize().width;

Object o = removedComponents.get(removedComponents.size() - 1);
Component c = (Component)o;
freeSpace -= c.getSize().width;

if (freeSpace >= 0)
{
container.add(c, 0);
removedComponents.remove(removedComponents.size() - 1);
}
}

// Some components still not shown, add the backward button

backwardButton.setVisible( !removedComponents.isEmpty() );

// repaint();

}

public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
public void componentHidden(ComponentEvent e) {}

// Implement the ActionListener

public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();

// Scroll the components in the container

if (source == forwardButton)
scrollForward();
else
scrollBackward();
}

/*
* Simulate scrolling forward
* by remove the first component from the container
*/
private void scrollForward()
{
if (container.getComponentCount() == 1)
return;

// Remove and save the first component

Component c = container.getComponent(0);
container.remove( c );
removedComponents.add( c );

// Allow for backwards scrolling

backwardButton.setVisible( true );

// All components are showing, hide the forward button

int backwardButtonWidth = backwardButton.getPreferredSize().width;
int containerWidth = container.getPreferredSize().width;
int panelWidth = getSize().width;

if (backwardButtonWidth + containerWidth <= panelWidth)
forwardButton.setVisible( false );

// Force a repaint of the panel

revalidate();
repaint();
}

/*
* Simulate scrolling backward
* by adding a removed component back to the container
*/
private void scrollBackward()
{
if (removedComponents.isEmpty())
return;

// Add a removed component back to the container

Object o = removedComponents.remove(removedComponents.size() - 1);
Component c = (Component)o;
container.add(c, 0);

// Display scroll buttons when necessary

if (removedComponents.isEmpty())
backwardButton.setVisible( false );

forwardButton.setVisible( true );
revalidate();
repaint();
}

private void configureButton(JButton button)
{
button.setVisible( false );
button.addActionListener( this );
}

private static void createAndShowGUI()
{
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.add( new JButton("one") );
toolBar.add( new JButton("two222222") );
toolBar.add( new JButton("three") );
toolBar.add( new JButton("four") );
toolBar.add( new JButton("five") );
toolBar.add( new JButton("six666666666") );
toolBar.add( new JButton("seven") );
toolBar.add( new JButton("eight") );
toolBar.add( new JButton("nine9999999") );
toolBar.add( new JButton("ten") );
ScrollContainer container = new ScrollContainer(toolBar);

JFrame frame = new JFrame("Scroll Container");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(container, BorderLayout.NORTH);
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}

关于java - 在 JPanel 中左右移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com