我有9个j按钮添加到jpanel,面板添加到jscrollpane,它添加到jframe。
http://www.pic1.iran-forum.ir/images/up9/95426323683658592564.jpg
当我更改帧方向时:<代码>applyComponentOrientation(ComponentOrientation.RIGHT\u TO\u LEFT)
面板向右移动,按钮的大小固定,无法填充面板,但在下图中可以看到,scrolbar填充了面板的所有宽度
http://www.pic1.iran-forum.ir/images/up9/60975202722295688553.jpg
(我使用gridbag布局添加按钮和borderlayout.center添加滚动窗格)。
那是java中的错误还是?
编辑:这是最简单的视图。有帮助吗?
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.*;
public class MyFrame extends JFrame{
private JButton[] arrayButton = new JButton[9];
private JButton btnLeft = new JButton("<");
private JButton btnRight = new JButton(">");
private JScrollPane scpButtons = new JScrollPane();
public MyFrame() {
for (int i = 0; i < arrayButton.length; i++)
arrayButton[i] = new JButton("btn");
JPanel pnlButton = initPnlButton();
scpButtons.setViewportView(pnlButton);
setLayout(new BorderLayout());
add(scpButtons, BorderLayout.CENTER);
// comment it and see the result
applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
}
private JPanel initPnlButton() {
JPanel pnlButton = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1, 1, 10,
1, new Insets(0, 0, 0, 0), 0, 0);
int ind = 0;
int row = 3;
int column = 4;
for (int i = 0; i < row; i++) {
for (int j = 1; j < column; j++) {
gbc.gridx = j;
gbc.gridy = i;
pnlButton.add(arrayButton[ind++], gbc);
}
}
gbc.weightx = 0;
gbc.gridheight = 3;
gbc.gridx = 0;
gbc.gridy = 0;
pnlButton.add(btnLeft, gbc);
gbc.gridx = 4;
gbc.gridy = 0;
pnlButton.add(btnRight, gbc);
pnlButton.setPreferredSize(new Dimension(1000, 700));
return pnlButton;
}
public static void main(String[] args) {
new MyFrame();
}
}
在玩了很多属性并上下移动语句后,我找到了答案。如果你把
scpButtons.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
之后
<代码>应用组件(ComponentOrientation.RIGHT\u TO\u LEFT)
一切都会好起来的,无需setSize(getWidth()1, getHeight()1);
有趣的是,我今天过得很开心:)c或其他语言有这样的错误吗?
如果让SwingUtilities运行bloc,则在调整窗口大小之前,所有内容都是LtR。
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.*;
public class MyFrame extends JFrame {
private JButton[] arrayButton = new JButton[9];
private JButton btnLeft = new JButton("<");
private JButton btnRight = new JButton(">");
private JScrollPane scpButtons = new JScrollPane();
public MyFrame() {
for (int i = 0; i < arrayButton.length; i++)
arrayButton[i] = new JButton("btn");
JMenu mnuSettings = new JMenu("MENU");
JMenuBar menubar = new JMenuBar();
menubar.add(mnuSettings);
setJMenuBar(menubar);
JPanel pnlButton = initPnlButton();
scpButtons.setViewportView(pnlButton);
setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(scpButtons, BorderLayout.CENTER);
pack();
// [1]
setExtendedState(JFrame.MAXIMIZED_BOTH);
//setSize(getWidth() + 1, getHeight() + 1);
// [2]
setVisible(true);
// SwingUtilities.invokeLater(new Runnable() {
// public void run() {
applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
//here
scpButtons.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
// }
// });
}
private JPanel initPnlButton() {
JPanel pnlButton = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1, 1, 10,
1, new Insets(0, 0, 0, 0), 0, 0);
int ind = 0;
int row = 3;
int column = 4;
for (int i = 0; i < row; i++) {
for (int j = 1; j < column; j++) {
gbc.gridx = j;
gbc.gridy = i;
pnlButton.add(arrayButton[ind++], gbc);
}
}
gbc.weightx = 0;
gbc.gridheight = 3;
gbc.gridx = 0;
gbc.gridy = 0;
pnlButton.add(btnRight, gbc);
gbc.gridx = 4;
gbc.gridy = 0;
pnlButton.add(btnLeft, gbc);
pnlButton.setPreferredSize(new Dimension(1000, 700));
return pnlButton;
}
public static void main(String[] args) {
new MyFrame();
}
}
编辑4
(希望是最后一次:-)
最终的罪魁祸首似乎是scrollPane的主视口:它在RToL中调整视图大小时会感到困惑,因为它曾经比首选视图小。没有跟踪到底出了什么问题,但看起来是可行的(除了在内核中找到bug并推动snoracle进行修复;)解决方案是使视图实现可滚动,特别是实现
JXPanel(包含在SwingX中)是一个可滚动的,默认情况下它会执行第一个操作,并且可以通过适当设置ScrollableSizeHints来为后者进行配置:
private JPanel initPnlButton() {
JXPanel pnlButton = new JXPanel(new GridBagLayout());
pnlButton.setScrollableWidthHint(ScrollableSizeHint.PREFERRED_STRETCH);
pnlButton.setScrollableHeightHint(ScrollableSizeHint.PREFERRED_STRETCH);
...
}
有了这些,就不需要更多的粗线条,只需在添加所有组件后应用CO即可:
applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
pack();
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
编辑2
我们(Reza Gh和我)玩得越多,我就越倾向于把这种行为视为一种错误。总结我们的最新发现
编辑
再玩一点,在我看来,这是一种非常奇怪的实例化行为。要播放的片段(在实例化结束时)
pack();
// [1]
setSize(getWidth() + 1, getHeight() + 1);
// [2]
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
});
和注释1、2或两者
确切的行为可能也取决于本机组件方向(我的是LToR)。总的来说,我认为这是组件定向的核心处理中的一个bug(毫不奇怪,经过这么多年,它并不像我们预期的那样稳定)。
看起来像是一种破解方法,就是在一个包之后调整大小(稍微增加1个像素左右,max本身不起作用),然后调用applyCO。
原始的
这并没有解决最初的问题(即在框架实例化时应用componentOrientation),只演示了如何在运行时安全地切换CO
Action createCOToggle(final JFrame frame) {
Action toggleComponentOrientation = new AbstractAction("toggle orientation") {
@Override
public void actionPerformed(ActionEvent e) {
ComponentOrientation current = frame.getComponentOrientation();
if (current.isLeftToRight()) {
frame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
} else {
frame.applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
}
frame.getRootPane().revalidate();
frame.invalidate();
frame.validate();
frame.repaint();
}
};
return toggleComponentOrientation;
}
使用它配置动作感知组件将使框架按预期运行,即填充整个区域。许多re/in/validate看起来很奇怪,但事实证明是必要的(在jdk6中),正如我们在SwingX测试覆盖中所经历的那样
现在我的期望是,在框架实例化的末尾调用相同的操作也会使它表现良好,也就是说
.... // configure/fill frame
setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createCOToggle(MyFrame.this).actionPerformed(null);
}
});
不幸的是,它没有。目前没有线索为什么不,抱歉。
我已经在我的应用程序中使用了上述代码。编辑部分工作正常,但问题是,只有当我们在单元格上从左向右滑动时,删除按钮才会出现。现在我有了一个菜单,可以像Facebook一样从左向右滑动。那么,我如何确保当用户从右向左滑动时,删除按钮出现呢。
本文向大家介绍jQuery控制的不同方向的滑动(向左、向右滑动等),包括了jQuery控制的不同方向的滑动(向左、向右滑动等)的使用技巧和注意事项,需要的朋友参考一下 引入jquery.js,复制以下代码,即可运行。 1、slidetoggle() 交替slidedown(),slideup() Html代码 Js代码 2、左侧横向交替滑动 Animate Left Html代码 Js代码 3、左
Framework7 完全支持从右向左的语言。你只需要增加一个额外的CSS文件即可: <!DOCTYPE html> <html> <head> ... <title>My App</title> <!-- Path to Framework7 Library CSS--> <link rel="stylesheet" href="path/to/framewo
问题内容: 我整天都在努力,但没有提出解决方案。我在一个容器中的一行中有3列。 1:正确的内容–向右拉 2:导航–向左拉 3:主要内容 在大屏幕上看起来是什么: 在较小的屏幕上应该是什么样子: 现在看起来像什么: 我认为这只是一个简单的浮动问题。但是我几乎尝试了所有可能性。 问题答案: 引导程序3 使用Bootstrap 3的网格系统: 说明 首先,我们设置了两列,无论屏幕分辨率()都将保持不变。
我在水平方向上使用RecyclerView,New element从左到右。和滚动是 ltr。如何改变这个方向? XML 代码: 和Java: 适配器: public class AdapterMainPrice extender RecyclerView.Adapter {
我需要在我的代码中检测滑动方向。我可以检测到方向,但它就像我向右、右上方或左上方滑动一样。左边也一样,我的要求是不抬手指,如果我向左划,它应该只向左,所有的方向都一样。有人能帮帮我吗。提前感谢! @重写公共布尔onTouchEvent(MotionEvent touchevent){