그래서 아래에서 몇 가지 데모 코드를 만들었습니다.오른쪽에서 왼쪽으로의 컴포넌트 지향을위한 JInternalFrames의 JScrollPanes - Java 버그?
JScrollPane이 JInternalFrame 내에 있고 구성 요소 방향이 오른쪽에서 왼쪽으로 설정된 경우 프레임을 최소화 할 때 스크롤 막대가 내용의 왼쪽에 위치한다는 것을 알 수 있습니다. RtL로 볼 때, 스크롤 창을 내부 프레임에 추가하지 않으면 내용의 오른쪽에 머무를 것으로 예상됩니다 (두 프레임 참조 - 하나가 데모에서 다른 뒤에 표시됨).
이것은 자바 버그입니까? 아니면 무언가를하는 것을 잊었습니까? 사전에
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
public class JScrollBarTest
{
public static void main(String[] a)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) { }
runInternalFrameDemo();
runNormalDemo();
}
private static void runInternalFrameDemo()
{
// Frame...
final JFrame frame = new JFrame("Internal Frame Demo");
frame.setSize(new Dimension(500, 500));
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Desktop pane...
JDesktopPane desktopPane = new JDesktopPane();
// Table...
JTable table = getTable();
// Scroll pane...
JScrollPane scrollPane = new JScrollPane();
// Internal frame...
final JInternalFrame internalFrame = new JInternalFrame("Test Internal Frame", true, true, true, true);
internalFrame.setSize(400, 300);
internalFrame.setLocation(50, 50);
internalFrame.setVisible(true);
// Add everything...
frame.setContentPane(desktopPane);
desktopPane.add(internalFrame);
internalFrame.setContentPane(scrollPane);
scrollPane.setViewportView(table);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
internalFrame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
frame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
frame.setVisible(true);
}
});
}
private static void runNormalDemo()
{
// Frame...
final JFrame frame = new JFrame("Normal Demo");
frame.setSize(new Dimension(500, 500));
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Table...
JTable table = getTable();
// Scroll pane...
JScrollPane scrollPane = new JScrollPane();
// Add everything...
frame.setContentPane(scrollPane);
scrollPane.setViewportView(table);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
frame.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
frame.setVisible(true);
}
});
}
private static JTable getTable()
{
final String[] columns = { "test 1", "test 2", "test 3", "test 4" };
final Object[][] data = { { "1", "2", "3", "4" }, { "1", "2", "3", "4" } };
final JTable table = new JTable(data, columns);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
return table;
}
}
감사 :
다음은 데모 코드입니다.
편집 : 명확성의 부족에 대한
사과 - 꽤 서두에 작성합니다.
너비가 인 테이블의 '일반 데모'(JInternalFrame에는 포함되지 않음)를 줄이면 오른쪽에서 가로 스크롤 막대가 시작되고 '내 부 프레임' 프레임 데모 '를 선택하면 왼쪽에서 가로 스크롤 막대가 시작됩니다.
아이디어가 있으십니까?
스크롤 막대가 나타날 때까지 창 크기를 최소화하거나 줄이는 것에 대해 이야기하고 있습니까? 어떤 Java 버전을 사용하고 있습니까? Windows와 Java 1.6에서 예제를 시도했는데 두 스크롤바가 모두 왼쪽에 있습니다. 'applyComponentOrientation'을 제거하면 두 스크롤바가 오른쪽에 있습니다. –
@Ed ... Atleast 나는 문제를 이해했다. 그것은 InternalFrame 내부에서만 발생하는 것 같아요 비록 내가 crollbar (왼쪽/오른쪽) poisitoning 어떤 문제가 될 것이라고 이해가 안 돼요. 그럼에도 불구하고 나는 그것을 들여다 볼 것이다. –
여전히 재현 할 수 없습니다. 두 스크롤바는 왼쪽에서 시작합니다 ... 어떤 Java 버전을 사용합니까? –