cuốn sách gpt4 ai đã làm

android — Thanh công cụ cạnh nhau

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 07:55:09 27 4
mua khóa gpt4 Nike

Tôi muốn có hai thanh công cụ riêng biệt trên JFrame và có thể di chuyển từng thanh công cụ riêng lẻ sang phía đông, phía tây hoặc phía nam của khung, tôi đã thử sử dụng BorderLayout nhưng điều đó không có ích, tôi biết tôi có thể di chuyển từng thanh công cụ với BorderLayout được đặt trên một bảng và có thể di chuyển chúng, nhưng điều tôi thực sự cần là đặt chúng cạnh nhau và có thể di chuyển từng cái riêng lẻ, mã này không hoạt động nhưng nó sẽ giúp hiểu vấn đề của tôi, có thể có ai vui lòng giúp tôi không?

kiểm tra gói;

nhập java.awt.Dimension;
nhập javax.swing.JLabel;
nhập javax.swing.JPanel;

biểu mẫu kiểm tra lớp công khai mở rộng javax.swing.JFrame {
mẫu thử nghiệm công khai() {
initComponents();
jPanel1.removeAll();
jPanel1.setPreferredSize(Kích thước mới (800.800));
MultiBorderLayout amMultiBorderLayout = MultiBorderLayout mới(0, 0);
jPanel1.add("Miền Bắc", jToolBar1);
jPanel1.add("Miền Bắc", jToolBar2);
jPanel1.add("Trung tâm",jPanel2);
jPanel1.setLayout(amMultiBorderLayout);

jPanel1.revalidate();

}
@SuppressWarnings("không được chọn")
//
khoảng trống riêng tư initComponents() {

jPanel1 = javax.swing.JPanel mới();
jPanel2 = javax.swing.JPanel mới();
jLabel1 = javax.swing.JLabel mới();
jToolBar1 = javax.swing.JToolBar mới();
jButton1 = javax.swing.JButton mới();
jToolBar2 = javax.swing.JToolBar mới();
jButton2 = javax.swing.JButton() mới;

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

javax.swing.GroupLayout jPanel1Layout = javax.swing.GroupLayout mới (jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 156, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 31, Short.MAX_VALUE)
);

jLabel1.setText("jLabel1");

javax.swing.GroupLayout jPanel2Layout = javax.swing.GroupLayout mới (jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(43, Short.MAX_VALUE)
.addComponent(jLabel1)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(71, Short.MAX_VALUE))
);

jToolBar1.setRollover(true);

jButton1.setText("jButton1");
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(jButton1);

jToolBar2.setRollover(true);

jButton2.setText("jButton2");
jButton2.setFocusable(false);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar2.add(jButton2);

Bố cục javax.swing.GroupLayout = javax.swing.GroupLayout mới (getContentPane());
getContentPane().setLayout(layout);
bố cục.setHorizontalGroup(
bố cục.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 86, Short.MAX_VALUE)
.addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(76, 76, 76)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 63, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 64, Short.MAX_VALUE)))
);
bố cục.setVerticalGroup(
bố cục.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(64, Short.MAX_VALUE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 103, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 104, Short.MAX_VALUE)))
);

đóng gói();
}//


public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

công khai void run() {
testform mới().setVisible(true);
}
});
}
// Khai báo biến - không sửa đổi
javax.swing.JButton jButton1 riêng tư;
javax.swing.JButton jButton2 riêng tư;
javax.swing.JLabel jLabel1 riêng tư;
javax.swing.JPanel jPanel1 riêng tư;
javax.swing.JPanel jPanel2 riêng tư;
javax.swing.JToolBar jToolBar1 riêng tư;
javax.swing.JToolBar jToolBar2 riêng tư;
// Kết thúc khai báo biến
}

câu trả lời hay nhất

Tôi đã triển khai tiện ích mở rộng BorderLayout để hỗ trợ việc này. CẬP NHẬT: Mã giống như ứng dụng thử nghiệm nhỏ http://java-sl.com/tip_multiple_floatable_toolbars.html

Sử dụng nó ở đây thay vì BorderLayout jPanel1.setLayout(java.awt.BorderLayout() mới);

nhập java.awt.*;
nhập java.util.Vector;

/**
* Mở rộng BorderLayout với nhiều thành phần trong NorthList, SouthList, EastList, WestList
* và centerList. Bố cục được sử dụng để làm việc chính xác với nhiều thanh công cụ.
*
* @tác giả Stanislav Lapitsky
* @phiên bản 1.0
*/
lớp công khai MultiBorderLayout mở rộng BorderLayout {

/**
* danh sách các thành phần của khu vực NorthList
*/
Vector NorthList = Vector mới();

/**
* danh sách các thành phần của khu vực southList
*/
Vector southList = Vector mới();

/**
* danh sách các thành phần của vùng westList
*/
Vector westList = Vector mới();

/**
* danh sách các thành phần của vùng EastList
*/
Vector eastList = Vector mới();

/**
* danh sách các thành phần của vùng centerList
*/
Vector centerList = Vector mới();

/**
* Xây dựng thể hiện bố cục mặc định.
*/
MultiBorderLayout công khai() {
super();
}

/**
* Xây dựng phiên bản bố cục mới với các tham số được xác định.
*
* @param hgap khoảng cách ngang.
* @param vgap khoảng cách dọc.
*/
public MultiBorderLayout(int hgap, int vgap) {
siêu(hgap, vgap);
}

/**
* Thêm thành phần được chỉ định vào bố cục, sử dụng thuộc tính được chỉ định
* đối tượng ràng buộc. Đối với bố cục đường viền, ràng buộc phải là một trong các đối tượng
* các hằng số sau: BẮC, SOUTH, EAST
* , TÂY hoặc TRUNG TÂM.
*
* Hầu hết các ứng dụng không gọi trực tiếp phương thức này.
* khi một thành phần được thêm vào vùng chứa bằng Container.add
* Phương thức có cùng loại đối số.
*
* @param name Tính năng sẽ được thêm vào LayoutComponent
* thuộc tính.
* @param tính thành phần sẽ được thêm vào.
*/

//phương thức này không được dùng nữa nhưng cần phải ghi đè nó vì lớp hiện tại mở rộng
// BorderLayout để cung cấp nhiều thành phần (thanh công cụ)
public void addLayoutComponent(Tên chuỗi, Thành phần comp) {
đã đồng bộ hóa (comp.getTreeLock()) {
/*
* Trường hợp đặc biệt: coi null giống như "Trung tâm".
*/
nếu (tên == null) {
name = "Trung tâm";
}

/*
* Gán thành phần cho một trong các vùng đã biết của bố cục.
*/
if ("Trung tâm".equals(name)) {
centerList.add(comp);
} else if ("Miền Bắc".equals(name)) {
NorthList.insertElementAt(comp, 0);
} else if ("Miền Nam".equals(name)) {
southList.add(comp);
} else if ("East".equals(name)) {
EastList.add(comp);
} else if ("West".equals(name)) {
westList.add(comp);
} khác {
ném IllegalArgumentException mới ("không thể thêm vào bố cục: ràng buộc không xác định:" + tên);
}
}
}

/**
* Loại bỏ thành phần được chỉ định khỏi bố cục đường viền này.
* được gọi khi vùng chứa gọi remove hoặc removeAll của nó
* Hầu hết các ứng dụng không gọi trực tiếp phương thức này.
*
* @param tính thành phần cần loại bỏ.
*/
public void RemoveLayoutComponent(Component comp) {
đã đồng bộ hóa (comp.getTreeLock()) {
southList.remove(comp);
NorthList.remove(comp);
centerList.remove(comp);
westList.remove(comp);
EastList.remove(comp);
}
}

/**
* Xác định kích thước tối thiểu của vùng chứa target bằng cách sử dụng
* trình quản lý bố cục này


*
* Phương thức này được gọi khi một container gọi getMinimumSize của nó
* Phương thức này Hầu hết các ứng dụng không gọi trực tiếp phương thức này.
*
* @param nhắm mục tiêu vùng chứa để thực hiện bố cục.
* @return kích thước tối thiểu cần thiết để bố trí các thành phần phụ
* của vùng chứa được chỉ định.
*/
Thứ nguyên công khai tối thiểuLayoutSize(Mục tiêu vùng chứa) {
đã đồng bộ hóa (target.getTreeLock()) {
Thứ nguyên mờ = Thứ nguyên mới (0, 0);

Thành phần c;

if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Thành phần) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getMinimumSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Thành phần) westList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getMinimumSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Thành phần) centerList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getMinimumSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
}
if (northList.size() > 0) {
for (int i = 0; i < NorthList.size(); i++) {
c = (Thành phần) NorthList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getMinimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Thành phần) southList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getMinimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}

Phần trong phần trong = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;

trở lại mờ nhạt;
}
}

/**
* Xác định kích thước ưa thích của vùng chứa đích bằng cách sử dụng
* trình quản lý bố cục này, dựa trên các thành phần trong vùng chứa

.
*
* Hầu hết các ứng dụng không gọi trực tiếp phương thức này.
* khi vùng chứa gọi phương thức getPreferredSize của nó.
*
* @param nhắm mục tiêu vùng chứa để thực hiện bố cục.
* @return các kích thước ưa thích để bố trí các thành phần phụ của
* thùng chứa được chỉ định.
*/
public Dimension prefferedLayoutSize(Mục tiêu vùng chứa) {
đã đồng bộ hóa (target.getTreeLock()) {
Thứ nguyên mờ = Thứ nguyên mới (0, 0);

Thành phần c;

if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Thành phần) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Thành phần) westList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Thành phần) centerList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
}
if (northList.size() > 0) {
for (int i = 0; i < NorthList.size(); i++) {
c = (Thành phần) NorthList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Thành phần) southList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}

Phần trong phần trong = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;

trở lại mờ nhạt;
}
}

/**
* Bố trí đối số vùng chứa bằng cách sử dụng bố cục đường viền này.
*
* Phương pháp này thực sự định hình lại các thành phần trong vùng chứa được chỉ định
* để đáp ứng các ràng buộc của BorderLayout này
* đối tượng. Các thành phần BẮCSOUTH, nếu có,
* lần lượt được đặt ở trên cùng và dưới cùng của vùng chứa.
* Sau đó, các thành phần WESTEAST được đặt trên
* trái và phải tương ứng. Cuối cùng, đối tượng CENTER là.
* được đặt ở bất kỳ khoảng trống nào còn lại ở giữa


*
* Hầu hết các ứng dụng không gọi trực tiếp phương thức này.
* khi vùng chứa gọi phương thức doLayout của nó.
*
* @param nhắm mục tiêu vùng chứa để thực hiện bố cục.
*/
public void bố cụcContainer(Mục tiêu vùng chứa) {
đã đồng bộ hóa (target.getTreeLock()) {
Phần trong phần trong = target.getInsets();
int top = insets.top;
int Bottom = target.getHeight() - insets.bottom;
int left = insets.left;
int right = target.getWidth() - insets.right;

Thành phần c;

if (northList.size() > 0) {
for (int i = 0; i < NorthList.size(); i++) {
c = (Thành phần) NorthList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
c.setSize(phải - trái, d.height);
c.setBounds(trái, trên, phải - trái, c.getHeight());
đỉnh += d.height;
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Thành phần) southList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
c.setSize(phải - trái, d.height);
c.setBounds(trái, dưới - d.height, phải - trái, c.getHeight());
đáy -= d.height;
}
}
if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Thành phần) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
c.setSize(d.width, dưới - trên);
c.setBounds(phải - d.width, top, c.getWidth(), Bottom - top);
phải -= d.width;
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Thành phần) westList.get(i);
if (!c.isVisible()) {
continue;
}
Kích thước d = c.getPreferredSize();
c.setSize(d.width, dưới - trên);
c.setBounds(trái, trên cùng, c.getWidth(), dưới cùng - trên cùng);
trái += d.width;
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Thành phần) centerList.get(i);
if (!c.isVisible()) {
continue;
}
c.setBounds(trái, trên, phải - trái, dưới - trên);
}
}
}
}

}

Về java - các thanh công cụ cạnh nhau, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8150557/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress