0
當可見容器小於所有按鈕需要的空間時,是否有方法在JToolBar
(API)中有一個箭頭(如)?如果添加的按鈕太多,JToolBar顯示箭頭
(爲了說明的目的見WebUI zkoss)
UI管理器(L & F)應該是擺動的正常之一。
當可見容器小於所有按鈕需要的空間時,是否有方法在JToolBar
(API)中有一個箭頭(如)?如果添加的按鈕太多,JToolBar顯示箭頭
(爲了說明的目的見WebUI zkoss)
UI管理器(L & F)應該是擺動的正常之一。
有沒有辦法有一個箭頭
這不是API的一部分,所以你需要創建自己的。
您可能可以使用以下內容給您一些建議。這方面的例子添加按鈕左/右時,有沒有對所有的按鈕足夠的空間,讓您可以滾動查看每個按鈕:按要求
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();
}
});
}
}
所以,你會需要修改代碼來創建一個彈出菜單包含額外的按鈕。
你好,本週我會看看,並會相應地勾選答案。 – Markus